/**
 * 自动布局
 */
window.autoLayout = function autoLayout() {
  const intervalX = 100; // 横向间隔
  const intervalY = 50; // 纵向间隔
  const verticalCenter = true; // 是否垂直居中
  let nextX = 0; // 下一个节点的 x 坐标
  let nextY = 0; // 下一个节点的 y 坐标
  let maxWidth = 0; // 节点组最大宽度
  stage.edgeNodeGroups.forEach((group, index) => {
    // 计算下一个节点组的起始坐标
    nextX += maxWidth + intervalX * Math.sign(index);
    nextY = 0;
    maxWidth = 0;
    // 对节点组根据需求预处理
    group.sort((a, b) => a.x - b.x).sort((a, b) => a.y - b.y);
    // 更新节点组各节点坐标
    group.forEach((node) => {
      // 更新节点坐标
      (node.x = nextX), (node.y = nextY);
      // 计算下一个节点 y 坐标
      nextY += node.height + intervalY;
      // 更新节点组最大宽度
      if (maxWidth < node.width) maxWidth = node.width;
    });
    // 垂直居中对齐，调整各节点 x 坐标
    if (verticalCenter) group.forEach((node) => (node.x += (maxWidth - node.width) / 2));
  });
  // 画布自适应
  stage.adaptive();
  // 画布记录历史状态
  stage.save();
};
